package ucla.axelia.controlador.servicios;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import ucla.axelia.controlador.interfaces.IServicioAdministracionReporteVoluntariosPorActividad;
import ucla.axelia.modelo.dao.ServicioActividadDAO;
import ucla.axelia.modelo.dao.ServicioTipoActividadDAO;
import ucla.axelia.modelo.dao.ServicioVoluntarioAsignadoDAO;
import ucla.axelia.modelo.data.Actividad;
import ucla.axelia.modelo.data.DataGenerica;
import ucla.axelia.modelo.data.TipoActividad;
import ucla.axelia.modelo.data.Voluntario;

public class ServicioAdministracionReporteVoluntariosPorActividad implements IServicioAdministracionReporteVoluntariosPorActividad{

	private ServicioTipoActividadDAO servicioTipoActividadDAO;
	private ServicioActividadDAO servicioActividadDAO;
	private ServicioVoluntarioAsignadoDAO servicioVoluntarioAsignadoDAO;

	public List<Actividad> buscarActividadesPorTipo(TipoActividad tipoActividad) {
		return servicioActividadDAO.buscarPorPropiedad("tipoActividad", tipoActividad, DataGenerica.DATA_ACTIVO);
	}

	public List<TipoActividad> buscarTiposDeActividades() {
		return servicioTipoActividadDAO.buscarTodos(DataGenerica.DATA_ACTIVO);	
	}

	@Override
	public List<Voluntario> obtenerVoluntariosPorActividad(Actividad actividad) {
		Session sesion = servicioVoluntarioAsignadoDAO.getSessionFactory().getCurrentSession();
		Query query = sesion.createQuery(
				"select distinct voluntarioAsignado.voluntario from VoluntarioAsignado voluntarioAsignado " +
				"where voluntarioAsignado.actividadPlanificada.actividad = :actividad " +
				"and voluntarioAsignado.estado = :estado " +
				"order by voluntarioAsignado.voluntario.codigoVoluntario");
		query.setEntity("actividad", actividad);
		query.setString("estado", DataGenerica.DATA_ACTIVO);
		return query.list();
	}
	
	
	// Setters y Getters

	public ServicioTipoActividadDAO getServicioTipoActividadDAO() {
		return servicioTipoActividadDAO;
	}

	public void setServicioTipoActividadDAO(
			ServicioTipoActividadDAO servicioTipoActividadDAO) {
		this.servicioTipoActividadDAO = servicioTipoActividadDAO;
	}

	public ServicioActividadDAO getServicioActividadDAO() {
		return servicioActividadDAO;
	}

	public void setServicioActividadDAO(ServicioActividadDAO servicioActividadDAO) {
		this.servicioActividadDAO = servicioActividadDAO;
	}

	public ServicioVoluntarioAsignadoDAO getServicioVoluntarioAsignadoDAO() {
		return servicioVoluntarioAsignadoDAO;
	}

	public void setServicioVoluntarioAsignadoDAO(
			ServicioVoluntarioAsignadoDAO servicioVoluntarioAsignadoDAO) {
		this.servicioVoluntarioAsignadoDAO = servicioVoluntarioAsignadoDAO;
	}
	
}
